name: Code check

on:
  push:
    branches: [master, "release/*"]
  pull_request:
    branches: [master, "release/*"]
    paths:
      - ".actions/*"
      - ".github/workflows/code-checks.yml"
      - "requirements/**"
      - "src/**"
      - "pyproject.toml" # includes mypy config
      - "!requirements/docs.txt"
      - "!requirements/*/docs.txt"
      - "!*.md"
      - "!**/*.md"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

defaults:
  run:
    shell: bash

jobs:
  mypy:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.10.6"

      - name: Mypy cache
        uses: actions/cache@v4
        with:
          path: .mypy_cache
          key: mypy-${{ hashFiles('requirements/typing.txt') }}

      - name: Install dependencies
        env:
          FREEZE_REQUIREMENTS: 1
        timeout-minutes: 20
        run: |
          # TODO: investigate hanging installation with app sub-package
          pip install -e '.[pytorch-all,fabric-all]' -r requirements/typing.txt
          pip list

      - name: Check typing
        run: mypy
